package com.crane.oss.school.service;

import java.util.List;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.crane.common.core.dto.SingleResponse;
import com.crane.oss.app.bean.req.AppUpdatePicReq;
import com.crane.oss.app.bean.request.mqtt.UpdateModeResp;
import com.crane.oss.app.bean.resp.AppStudentInfo;
import com.crane.oss.school.bean.request.QueryStudentReq;
import com.crane.oss.school.bean.request.QueryWaitingStudentReq;
import com.crane.oss.school.bean.request.student.AddLayerClassesReq;
import com.crane.oss.school.bean.request.student.AddStudentReq;
import com.crane.oss.school.bean.request.student.AppUpdateStudentReq;
import com.crane.oss.school.bean.request.student.BatchChangeStudentReq;
import com.crane.oss.school.bean.request.student.BatchDeleteStudentReq;
import com.crane.oss.school.bean.request.student.BatchImportStudentEntity;
import com.crane.oss.school.bean.request.student.BatchUpdateSnReq;
import com.crane.oss.school.bean.request.student.ChangeStudentReq;
import com.crane.oss.school.bean.request.student.DeleteStudentReq;
import com.crane.oss.school.bean.request.student.UpdateStudentReq;
import com.crane.oss.school.bean.resp.StudentExportResp;
import com.crane.oss.school.bean.resp.StudentResp;
import com.crane.oss.school.bean.resp.StudentSimpleResp;

/**
 * 学生信息表
 *
 * @author zhenxing.pi
 * @email ccsu123456@qq.com
 * @date 2022年03月26日 14时24分54秒
 */
public interface StudentService {

	/**
	 * 查詢对象
	 *
	 * @param id
	 * @return
	 */
	StudentResp queryStudent(Long studentId);

	StudentResp queryStudentOnInit(Long studentId);

	/**
	 * 查询列表
	 *
	 * @param request
	 * @return
	 */
	IPage<StudentResp> queryList(QueryStudentReq request);

	/**
	 * 导出学生
	 *
	 * @param request
	 * @return
	 */
	List<StudentExportResp> queryExportList(QueryStudentReq request);

	/**
	 * 查询学生班级列表
	 *
	 * @param request
	 * @return
	 */
	IPage<StudentResp> queryStudentClassList(QueryStudentReq request);

	/**
	 * 保持对象
	 *
	 * @param request
	 * @return
	 */
	int save(AddStudentReq request);

	/**
	 * 修改对象
	 *
	 * @param request
	 * @return
	 */
	int update(UpdateStudentReq request);

	/**
	 * 删除学生
	 *
	 * @param id
	 * @return
	 */
	int delete(DeleteStudentReq request);

	/**
	 * 批量删除学生
	 *
	 * @param request
	 */
	void batchDelete(BatchDeleteStudentReq request);

	/**
	 * 学生转班
	 *
	 * @param request
	 * @return
	 */
	int change(ChangeStudentReq request);

	/**
	 * 学生批量转班
	 *
	 * @param request
	 */
	void batchChange(BatchChangeStudentReq request);

	/**
	 * 查询待加入分层班学生列表
	 *
	 * @param request
	 * @return
	 */
	IPage<StudentSimpleResp> waiting(QueryWaitingStudentReq request);

	/**
	 * 学生加入分层班
	 *
	 * @param request
	 * @return
	 */
	void join(AddLayerClassesReq request);

	/**
	 * 批量修改学生编号
	 *
	 * @param request
	 */
	void batchUpdate(BatchUpdateSnReq request);

	/**
	 * app用户查询学生信息
	 *
	 * @param
	 */
	List<AppStudentInfo> appQueryStudentInfo(Long appUserId);

	/**
	 * app修改学生头像
	 *
	 * @param
	 */
	void updateUserPicUrl(AppUpdatePicReq appUpdatePicReq);

	/**
	 * 查询学号是否存在
	 * @param sn
	 * @param partyId
	 * @return
	 */
	boolean queryStudentSNExisit(String sn, Long partyId);

	/**
	 * 批量保存学生
	 *
	 * @param entityList    学生信息列表
	 * @param partyId       学校ID
	 * @param createUserId  系统用户ID
	 * @param schoolId      校区ID
	 * @param grade         年级
	 * @param classId       班级ID
	 */
	void batchSave(List<BatchImportStudentEntity> entityList, Long partyId, Long createUserId, Long schoolId,Integer grade, Long classId);

	/**
	 * 小程序修改学生信息
	 *
	 * @param request
	 */
	SingleResponse<UpdateModeResp> appUpdateStudent(AppUpdateStudentReq request);
}
